"use strict";
// 普通装饰器
// function logClass(params:any){
//   console.log(params);
//   params.prototype.apiUrl = "动态拓展的属性";
//   params.prototype.run = () => {
//     console.log("动态拓展的方法")
//   }
// }
// @logClass
// class HttpClient{
//   constructor(){
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var _this = this;
//   }
//   getData(){
//   }
// }
// let http = new HttpClient();
// console.log(http.apiUrl);
// http.run();
// 装饰器工厂
// function logClass(params:string){
//   return (target:any) => {
//     console.log(target);
//     console.log(params);
//     target.prototype.apiUrl = params;
//   }
// }
// @logClass("http://www.baidu.com")
// class HttpClient{
//   constructor(){
//   }
//   getData(){
//   }
// }
// let http = new HttpClient();
// console.log(http.apiUrl);
// http.run();
// 类装饰器
// let logClass = (target:any) => {
//   console.log(target)
//   return class extends target{
//     apiUrl:any = "修改后的数据";
//     getData(){
//       this.apiUrl = this.apiUrl + '-----'
//       console.log(this.apiUrl)
//     }
//   }
// }
// // 属性装饰器
// let logProperty = (params:any){
//   return (target:any, attr:any) => {
//     console.log('target---', target);
//     console.log('attr---', attr);
//     target[attr] = params;
//   }
// }
// @logClass
// class HttpClient{
//   @logProperty("http://www.sohu.com")
//   public apiUrl:string | undefined
//   constructor(){
//     this.apiUrl = "构造函数中的apiUrl"
//   }
//   getData(){
//     console.log(this.apiUrl)
//   }
// }
// let http = new HttpClient();
// http.getData();
// 方法装饰器
// let logMethod = (params:any) => {
//   return (target:any, methodName:any,desc:any) => {
//     console.log(target);
//     console.log(methodName);
//     console.log(desc);  //对应类中的方法==》getData()
//     console.log(desc.value);
//     target.apiUrl = "xxx";
//     target.run = () => {
//       console.log("run")
//     }
//   }
// }
// class HttpClient{
//   public apiUrl:string | undefined
//   constructor(){
//   }
//   @logMethod("http://www.itying.com")
//   getData(){
//     console.log(this.apiUrl)
//   }
// }
// let http = new HttpClient();
// console.log(http.apiUrl);
// http.run();
// 方法装饰器修改类中的方法
var logMethod = function (params) {
    return function (target, methodName, desc) {
        console.log(target);
        console.log(methodName);
        console.log(desc); //对应类中的方法==》getData()
        console.log(desc.value);
        target.apiUrl = "xxx";
        target.run = function () {
            console.log("run");
        };
        var oMethod = desc.value;
        desc.value = function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i] = arguments[_i];
            }
            args = args.map(function (value) {
                return String(value);
            });
            oMethod.apply(_this, args);
        };
    };
};
var HttpClient = /** @class */ (function () {
    function HttpClient() {
    }
    HttpClient.prototype.getData = function () {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
        }
        console.log(args);
        console.log("我是getData中的方法");
    };
    __decorate([
        logMethod("http://www.itying.com")
    ], HttpClient.prototype, "getData", null);
    return HttpClient;
}());
var http = new HttpClient();
http.getData(123, "xzxxxxx");
// 方法参数装饰器
